Telegram Group & Telegram Channel
🔹 C++26: ошибочное поведение (Erroneous Behaviour)

В C++ мы обычно говорим о двух категориях поведения:
определённое поведение (well-defined)
неопределённое поведение (undefined behaviour, UB)

Второе — одно из самых пугающих понятий в языке. Это когда программа делает что угодно, и компилятор не обязан предупреждать о проблеме. Примеры UB: выход за границы массива, разыменование нулевого указателя и т.д.

Однако в будущем стандарте C++26 вводится новая категория: ошибочное поведение (erroneous behaviour).

Что такое erroneous behaviour?

Это ситуация, когда программа ведёт себя неправильно, но компилятор обязан выдать ошибку или хотя бы предупреждение. Это промежуточный уровень между "всё хорошо" и "всё ужасно и не предсказуемо".

Erroneous behaviour позволяет:
- Сохранить производительность (в отличие от полного исключения или runtime-проверок)
- Сделать поведение программы более предсказуемым
- Упростить диагностику проблем

📌 Пример

Допустим, в constexpr-функции вызывается функция, не являющаяся constexpr. Сейчас это UB, но в C++26 это будет квалифицироваться как erroneous behaviour, и компилятор обязан будет выдать ошибку на этапе компиляции.


constexpr int foo() {
return std::time(nullptr); // std::time не является constexpr
}


Такой код сейчас может пройти компиляцию при определённых условиях, но в будущем — нет.

🧩 Отличие от UB и других видов поведения

- UB — компилятор может делать что угодно (не выдавать ошибку, не предупреждать, и т.д.)
- Implementation-defined — конкретная реализация (компилятор) должна задокументировать поведение
- Erroneous behaviour — компилятор обязан ругаться

🤔 Почему это важно?

Эта категория позволяет более чётко определять границы корректного кода и помогает разработчикам избегать трудноуловимых багов. Это шаг к более строгой и безопасной разработке на C++ без жёстких ограничений на производительность.

https://www.sandordargo.com/blog/2025/02/05/cpp26-erroneous-behaviour

#cpp #programming

👉 @cpp_lib



tg-me.com/cpp_lib/1912
Create:
Last Update:

🔹 C++26: ошибочное поведение (Erroneous Behaviour)

В C++ мы обычно говорим о двух категориях поведения:
определённое поведение (well-defined)
неопределённое поведение (undefined behaviour, UB)

Второе — одно из самых пугающих понятий в языке. Это когда программа делает что угодно, и компилятор не обязан предупреждать о проблеме. Примеры UB: выход за границы массива, разыменование нулевого указателя и т.д.

Однако в будущем стандарте C++26 вводится новая категория: ошибочное поведение (erroneous behaviour).

Что такое erroneous behaviour?

Это ситуация, когда программа ведёт себя неправильно, но компилятор обязан выдать ошибку или хотя бы предупреждение. Это промежуточный уровень между "всё хорошо" и "всё ужасно и не предсказуемо".

Erroneous behaviour позволяет:
- Сохранить производительность (в отличие от полного исключения или runtime-проверок)
- Сделать поведение программы более предсказуемым
- Упростить диагностику проблем

📌 Пример

Допустим, в constexpr-функции вызывается функция, не являющаяся constexpr. Сейчас это UB, но в C++26 это будет квалифицироваться как erroneous behaviour, и компилятор обязан будет выдать ошибку на этапе компиляции.


constexpr int foo() {
return std::time(nullptr); // std::time не является constexpr
}


Такой код сейчас может пройти компиляцию при определённых условиях, но в будущем — нет.

🧩 Отличие от UB и других видов поведения

- UB — компилятор может делать что угодно (не выдавать ошибку, не предупреждать, и т.д.)
- Implementation-defined — конкретная реализация (компилятор) должна задокументировать поведение
- Erroneous behaviour — компилятор обязан ругаться

🤔 Почему это важно?

Эта категория позволяет более чётко определять границы корректного кода и помогает разработчикам избегать трудноуловимых багов. Это шаг к более строгой и безопасной разработке на C++ без жёстких ограничений на производительность.

https://www.sandordargo.com/blog/2025/02/05/cpp26-erroneous-behaviour

#cpp #programming

👉 @cpp_lib

BY Библиотека C/C++ разработчика


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/cpp_lib/1912

View MORE
Open in Telegram


Библиотека C C разработчика Telegram | DID YOU KNOW?

Date: |

Launched in 2013, Telegram allows users to broadcast messages to a following via “channels”, or create public and private groups that are simple for others to access. Users can also send and receive large data files, including text and zip files, directly via the app.The platform said it has more than 500m active users, and topped 1bn downloads in August, according to data from SensorTower.

Telegram announces Search Filters

With the help of the Search Filters option, users can now filter search results by type. They can do that by using the new tabs: Media, Links, Files and others. Searches can be done based on the particular time period like by typing in the date or even “Yesterday”. If users type in the name of a person, group, channel or bot, an extra filter will be applied to the searches.

Библиотека C C разработчика from ua


Telegram Библиотека C/C++ разработчика
FROM USA